02 - 암호화 및 복호화
1. 암호화 접근 방식
- VASP 간 통신 시, 사용자 개인정보는 반드시 종단 간 암호화되어야 합니다.
- CodeVASP로 요청을 전송하기 전에, VASP는 Travel Rule 데이터를 암호화해야 합니다.
- HTTPS가 기본 보안을 보장하지만, 개인정보는 페이로드 객체의 일부로 추가 암호화되어 참여하는 VASP만이 이를 복호화할 수 있습니다. (다른 프로토콜과의 상호 운용 시에도 동일하게 적용됩니다.)
두 가지 암호화 방법 중 선택하실 수 있습니다.
- 옵션1. CodeVASP에서 제공하는 Cipher 모듈 사용 → 2. Cipher로 이동하십시오
- 옵션2. 사용자 정의 암호화 → 3. 사용자 정의 암호화로 이동하십시오
2. Cipher 모듈
- Cipher는 CodeVASP의 암호화 모듈로, Docker 이미지로 배포됩니다.
- [02-1. CodeVASP-Cipher 서버 모듈 가이드]를 읽고 가이드의 지침을 따라 주십시오.
- CodeVASP API 요청에는 Cipher 응답을 그대로 사용하십시오.
3. 사용자 정의 암호화
- Cipher를 사용하지 않고 암호화 및 복호화를 수행하는 경우 샘플 코드를 참조하십시오.
- 파일을 다운로드하려면 링크를 클릭하십시오.
4. API별 정보
- 요청 및 응답 시 암호화가 필요한 API에 대해 설명합니다.
- 모든 요청에는 서명이 필요합니다.
| API | 요청 | 응답 |
|---|---|---|
| VASP 목록 검색 공개 키 검색 코인별 네트워크 지갑으로 VASP 검색 요청 지갑으로 VASP 검색 결과 | X | X |
| 디지털 자산 주소 검색 | O | X |
| 자산 이전 승인 | O | O |
| 이전 결과 신고 (TX Hash) 거래 상태 검색 이전 완료 TXID로 VASP 검색 요청 TXID로 VASP 검색 결과 | X | X |
| 자산 이전 데이터 요청 | O | O |
5. 알고리즘 라이브러리
5-1. 권장 라이브러리
- libsodium (네트워킹 및 암호화 라이브러리)
- 공개 키 암호화 – 인증된 암호화
5-2. 알고리즘
5-3. 키 쌍
- 서명 키: Ed25519 알고리즘을 사용하여 디지털 서명을 생성하는 데 사용되는 개인 키입니다. CodeVASP 프로토콜에서는 이를 개인 키라고 합니다.
- 검증 키: 디지털 서명 생성에 사용되는 Ed25519 서명 키에 대응하는 공개 키입니다. CodeVASP 프로토콜에서는 이를 공개 키라고 합니다.
6. 키 쌍 생성
6-1. 대시보드에서 생성
저희 대시보드에 로그인하시면, 개발 - 환경 정보에서 생성하실 수 있습니다.
6-2. 제공된 샘플 코드 사용
from base64 import b64encode
from nacl.signing import SigningKey
signing_key = SigningKey.generate()
verify_key = signing_key.verify_key
# use signing key as private key
private_key_b64 = b64encode(bytes(signing_key)).decode('utf-8')
# use verify key as public key
public_key_b64 = b64encode(bytes(verify_key)).decode('utf-8')
print("Key generation complete.")
print("sk: " + private_key_b64)
print("pk: " + public_key_b64)
- 개인 키를 분실하시면, 키 쌍을 재생성해야 합니다.
- 대시보드의
개발 - 환경 정보에 공개 키를 입력하십시오.
7. 암호화 예시
7-1. 원본 메시지
{
"currency": "XRP",
"payload": {
"ivms101": {
"Beneficiary": {
"accountNumber": [
"rHcFoo6a9qT5NHiVn1THQRhsEGcxtYCV4d:memo or tag"
]
}
}
}
}
- 암호화 대상은 payload 객체이며,
{"ivms101": ...}부분이 암호화됩니다. - 송신측 VASP A는 수신측 VASP B의 공개 키와 자신(VASP A)의 개인 키를 사용하여 암호화합니다.
- payload 값은 암호화된 결과를 base64로 인코딩하여 덮어씁니다.
payload타입이 객체에서 문자열로 변경됩니다.
7-2. 암호화된 메시지 예시
{
"currency": "xrp",
"payload": "base64 encoded string"
}
- 수신자 VASP는 송신자 VASP의 공개 키와 수신자 VASP의 개인 키를 입력하여 복호화를 수행합니다.
8. 서명 생성 규칙
- 헤더에 포함된 서명은 다음 세 값을 바이트 배열로 연결하고 송신자 VASP의 개인 키(서명 키)로 서명하여 생성됩니다:
- X-Code-Req-Datetime
- Body 문자열
- X-Code-Req-Nonce
- CodeVASP 서버는 등록된 공개 키를 사용하여 서명을 검증합니다.
9. 참고 사항
- Python, Java, JavaScript, Go로 제공되는 샘플 코드
- 공식 채널을 통한 지원 제공